use crate::co;
use crate::decl::*;
use crate::gui::{*, privs::*};
use crate::msg::*;
use crate::prelude::*;
#[derive(Clone, Copy)]
pub struct ListViewColumn<'a, T: 'static = ()> {
owner: &'a ListView<T>,
index: u32,
}
impl<'a, T> ListViewColumn<'a, T> {
#[must_use]
pub(in crate::gui) const fn new(owner: &'a ListView<T>, index: u32) -> Self {
Self { owner, index }
}
pub fn set_title(&self, text: &str) {
let mut lvc = LVCOLUMN::default();
lvc.iSubItem = self.index as _;
lvc.mask = co::LVCF::TEXT;
let mut buf = WString::from_str(text);
lvc.set_pszText(Some(&mut buf));
unsafe {
self.owner.hwnd()
.SendMessage(lvm::SetColumn {
index: self.index,
lvcolumn: &mut lvc,
})
}.unwrap();
}
pub fn set_width(&self, width: u32) {
let mut col_cx = SIZE::new(width as _, 0);
multiply_dpi(None, Some(&mut col_cx)).unwrap();
unsafe {
self.owner.hwnd()
.SendMessage(lvm::SetColumnWidth {
index: self.index,
width: col_cx.cx as _,
})
}.unwrap();
}
pub fn set_width_to_fill(&self) {
let num_cols = self.owner.columns().count();
if num_cols > 0 {
let mut cx_used = 0;
for i in 0..num_cols {
if i != self.index {
cx_used += self.owner.columns().get(i).width(); }
}
let rc = self.owner.hwnd().GetClientRect().unwrap(); unsafe {
self.owner.hwnd()
.SendMessage(lvm::SetColumnWidth {
index: self.index,
width: rc.right as u32 - cx_used,
})
}.unwrap();
}
}
#[must_use]
pub fn title(&self) -> String {
let mut lvc = LVCOLUMN::default();
lvc.iSubItem = self.index as _;
lvc.mask = co::LVCF::TEXT;
let mut buf = WString::new_alloc_buf(128); lvc.set_pszText(Some(&mut buf));
unsafe {
self.owner.hwnd()
.SendMessage(lvm::GetColumn {
index: self.index,
lvcolumn: &mut lvc,
})
}.unwrap();
buf.to_string()
}
#[must_use]
pub fn width(&self) -> u32 {
unsafe {
self.owner.hwnd()
.SendMessage(lvm::GetColumnWidth { index: self.index })
}.unwrap()
}
}